package org.jeecg.modules.system.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.poi.ss.formula.functions.T;
import org.jeecg.common.api.vo.Result;
import org.jeecg.modules.system.entity.SysDepart;
import org.jeecg.modules.system.model.SysDepartTreeModel;

import java.util.Collection;
import java.util.List;

/**
 * <p>
 * 部门表 服务实现类
 * <p>
 * 
 * @Author:Steve
 * @Since：   2019-01-22
 */
public interface ISysDepartService extends IService<SysDepart>{


    /**
     * 查询所有部门信息,并分节点进行显示
     * @return
     */
    List<SysDepartTreeModel> queryTreeList();

    /**
     * 查询公司信息,并分节点进行显示
     * @return
     */
    List<SysDepartTreeModel> queryCompanyTreeList();

    /**
     * 保存部门数据
     * @param sysDepart
     */
    void saveDepartData(SysDepart sysDepart);

    /**
     * 更新depart数据
     * @return
     */
    Result updateDepartDataById(SysDepart oldSysDepart, SysDepart newSysDepart);
    SysDepart getOfficeByDepartId(String departId);
    /**
     * 根据关键字搜索相关的部门数据
     * @param keyWord
     * @return
     */
    List<SysDepartTreeModel> searhBy(String keyWord);

    /**
     * 根据关键字搜索相关的部门数据
     * @param keyWord
     * @return
     */
    List<SysDepartTreeModel> searhCompanyBy(String keyWord);
    
    /**
     * 根据部门id删除并删除其可能存在的子级部门
     * @param id
     * @return
     */
    boolean delete(String id);
    
    /**
     * 查询SysDepart集合
     * @param userId
     * @return
     */
	public List<SysDepart> queryUserDeparts(String userId);

    /**
     * 查询id是否为管理处
     * @return
     */
	public  Integer  selectMange(String id);

    /**
     * 部门树查询
     * @return
     */
    public List<SysDepartTreeModel> queryUserTreeList();

    /**
     * 用户树查询
     * @return
     */
    public List<SysDepartTreeModel> queryDepartTreeList();

    /**
     * oa模块 部门树查询
     * @return
     */
    public List<SysDepartTreeModel> queryDepartTreeListOa();

    public List<SysDepart> findAll();
    String selectParentId(String id);


    String selectOfficeByProjectId(String id);

    /**
     * 获取所属公司
     * @param departId
     * @return
     */
    SysDepart getCompanyByDepartId(String departId);

    List<String> queryDepartPositionList(String departId);

    SysDepart queryDepartId(@Param("userId") String userId);

    List<SysDepart> findChildByParentIdAndName(String parentId,String departId,String departName);

    SysDepart getDepartName(String projectId);

    List<SysDepart> queryServerTreeList(String tenantId);

    void serverSave(SysDepart sysDepart);

    List<SysDepart> querySubTreeByParentId(SysDepart sysDepart);

    SysDepart getServerById(String tenantId, String id);

    int serverCountChild(String tenantId, String parentId, String departName);

    void serverUpdateName(String id,String name);
}
